﻿using System;
using System.Windows.Forms;
using System.Reflection;
using UniMana.Utils.Helper;
using System.Linq;
using UniMana.Data;
using DevExpress.XtraEditors;

namespace UniMana.Win.Systems
{
    public partial class a_FrmLogin : DevComponents.DotNetBar.Office2007RibbonForm
    {
        #region [Khai báo biến toàn cục]

        private static System_UserInfo m_sysUserLogin;
        public System.Media.SoundPlayer m_spBackgroundMusic;
        private string PublishVersion
        {
            get
            {
                if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
                {
                    Version ver = System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion;
                    return string.Format("{0}.{1}.{2}.{3}", ver.Major, ver.Minor, ver.Build, ver.Revision);
                }
                else
                    return Assembly.GetExecutingAssembly().GetName().Version.ToString();
            }
        }

        #endregion

        #region [Form Load]

        public a_FrmLogin()
        { 
            InitializeComponent(); 
        }

        private void FrmLogin_Load(object sender, EventArgs e)
        {
            LoadMusic(); // Khi mở From có nhạc
            ReadRegistry(); // Đọc Registry kiểm tra dấu check nếu có thì đưa giá trị từ Registry vào các Textbox Username và pass
        }

        #endregion

        #region [Sự kiện của các control trong Form]

        //Sự kiện khi Enter textboxUserName tương đương với bấm nút đăng nhập
        private void txtxUserName_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
                btnLogin_Click(sender, e);
        }

        //Sự kiện khi Enter textboxPassword tương đương với bấm nút đăng nhập
        private void txtxPassword_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
                btnLogin_Click(sender, e);
        }

        //Sự kiện bấm nút thoát sẽ đóng Form Login
        private void btnClose_Click(object sender, EventArgs e)
        {
            Cursor = Cursors.AppStarting;
            Application.Exit();
            Cursor = Cursors.Default;
        }

        //Sự kiện Bấm cùng lúc 3 nút Control + Shift + S : Hiện ra bảng cấu hình máy chủ
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            switch (keyData)
            {
                case Keys.Control | Keys.Shift | Keys.S: new FrmLogin_SubServerConfig().ShowDialog();
                    return true;
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }








        private void btnLogin_Click(object sender, EventArgs e)
        {
            Cursor = Cursors.AppStarting;
            ConfigConnection();

            if (UniMana.Data.DBMain.TestConnectServer() == false)
            {
                #region [Không kết nối được với Database]

                XtraMessageBox.Show("Không kết nối được với máy chủ", "Thông báo lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                if (++System_UserInfo.s_intNumberLogin == 3) txtxUserName.Enabled = txtxPassword.Enabled = ckbxRem.Enabled = btnLogin.Enabled = false; 
            }
            else
            {
                m_sysUserLogin = new System_UserInfo(txtxUserName.Text, txtxPassword.Text);
                if (System_UserInfo.m_flag == false) // tên CSDL bị rỗng
                {
                    System_UserInfo.m_flag = true;
                    XtraMessageBox.Show("Bạn chưa nhập tên Cơ sở dữ liệu cần kết nối", "Thông báo lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    if (++System_UserInfo.s_intNumberLogin == 3) txtxUserName.Enabled = txtxPassword.Enabled = ckbxRem.Enabled = btnLogin.Enabled = false;
                    Cursor = Cursors.Default;
                    return;
                }

                #endregion





                #region [True kết nối được Database]

                //Kiểm tra user và pass có đúng hay không true : đúng  .  false : sai
                SysGlobalVar.u_sta_CheckLogin = m_sysUserLogin.CheckLogin(txtxUserName.Text, txtxPassword.Text);

                if (SysGlobalVar.u_sta_CheckLogin) //Nếu bằng True đăng nhập thành công
                {
                    #region [True Đăng nhập thành công]

                    #region [Đóng Form và Reset số lần login bằng 0]

                    Close();
                    //m_spBackgroundMusic.Stop();
                    System_UserInfo.s_intNumberLogin = 0;

                    #endregion

                    #region [Lưu ngày giờ login vào Database]

                    DBMain data = new DBMain();
                    m_sysUserLogin.Properties.DateLogined = data.m_DCSave.GetSystemDate();
                    m_sysUserLogin.Save();

                    #endregion

                    #region [Gán thông tin user cho biến toàn cục]

                    SysGlobalVar.g_sta_sysUserLogin = m_sysUserLogin;
                    UniMana.Utils.LoginInfo.GblLoginInfo.strUserName = m_sysUserLogin.Properties.UserName;
                    UniMana.Utils.LoginInfo.GblLoginInfo.strPassWord = m_sysUserLogin.Properties.Password;
                    UniMana.Utils.LoginInfo.GblLoginInfo.sysLoginUserKey = m_sysUserLogin.Properties.System_UserKey;

                    #endregion

                    #region [Gán user này có quyền truy cập dữ liệu ở khoa nào]

                    IQueryable department = System_Rule_DepartmentData.GetAllowByUserKey(data, m_sysUserLogin.Properties.System_UserKey);
                    UniMana.Utils.LoginInfo.GblLoginInfo.iqrGetDepartment = department;

                    if (m_sysUserLogin.Properties.Personnel_PersonnelKey != null)
                    {
                        UniMana.Utils.LoginInfo.GblLoginInfo.sysLoginPersionalKey = m_sysUserLogin.Properties.Personnel_PersonnelKey.Value;
                        Personnel_PersonnelInfo personelInfo = new Personnel_PersonnelInfo(m_sysUserLogin.Properties.Personnel_PersonnelKey.Value);
                        if (personelInfo.Properties.Catalogue_DepartmentKey != null)
                        {
                            UniMana.Utils.LoginInfo.GblLoginInfo.iDepartmentKey = personelInfo.Properties.Catalogue_DepartmentKey.Value;
                            UniMana.Utils.LoginInfo.GblLoginInfo.iListDepartment.Add(personelInfo.Properties.Catalogue_DepartmentKey.Value);
                        }
                        else
                        {

                        }
                    }
                    else
                    {
                        //if (m_sysUserLogin.Properties.Catalogue_DepartmentKey != null)
                        //{
                        //    UniMana.Utils.LoginInfo.GblLoginInfo.iDepartmentKey = m_sysUserLogin.Properties.Catalogue_DepartmentKey.Value;
                        //}
                    }

                    #endregion

                    #endregion [True Đăng nhập thành công]
                }
                else
                {
                    #region [Đăng nhập không thành công 3 lần thì làm mờ các nút]

                    if (System_UserInfo.s_intNumberLogin == 3)
                    {
                        txtxUserName.Enabled = txtxPassword.Enabled = ckbxRem.Enabled = btnLogin.Enabled = false;
                    }

                    #endregion
                }

                #endregion [True kết nối được Database]
            }

            Cursor = Cursors.Default;
        }


        
        //Nếu check vào duy trì trạng thái đăng nhập thì trong lúc đóng frm lưu các thông tin từ textbox vào Registry
        private void FrmLogin_FormClosing(object sender, FormClosingEventArgs e)
        {
            ClsRegistryOperator Reg = new ClsRegistryOperator();
            if (SysGlobalVar.u_sta_CheckLogin)
            {
                if (ckbxRem.CheckState == CheckState.Checked)
                {
                    Reg.SaveInfoRegistry("UserName", txtxUserName.Text);
                    Reg.SaveInfoRegistry("Password", txtxPassword.Text);
                    Reg.SaveInfoRegistry("Rem", "true");
                }
                else
                {
                    Reg.DelRegistry("UserName");
                    Reg.DelRegistry("Password");
                    Reg.DelRegistry("Rem");
                }
            }
        }

        

        #endregion
    }
}